# Conversation Buffer Window

`ConversationBufferWindowMemory` 维护了一个对话随时间的交互列表。它只保留最近的 K 个交互。这对于保持最近交互的滑动窗口非常有用，以防缓冲区变得太大。

首先，让我们探索这种类型的记忆的基本功能。

```python
from langchain.memory import ConversationBufferWindowMemory
```

```python
memory = ConversationBufferWindowMemory( k=1)
memory.save_context({"input": "hi"}, {"output": "whats up"})
memory.save_context({"input": "not much you"}, {"output": "not much"})
```

```python
memory.load_memory_variables({})
```

---



```
    {'history': 'Human: not much you\nAI: not much'}
```

---



我们还可以将历史记录作为消息列表获取（如果您正在使用与聊天模型一起使用，则这将很有用）。

```python
memory = ConversationBufferWindowMemory( k=1, return_messages=True)
memory.save_context({"input": "hi"}, {"output": "whats up"})
memory.save_context({"input": "not much you"}, {"output": "not much"})
```

```python
memory.load_memory_variables({})
```

---



```
    {'history': [HumanMessage(content='not much you', additional_kwargs={}),
      AIMessage(content='not much', additional_kwargs={})]}
```

---



## 在链中使用
让我们通过一个例子来了解，再次设置 `verbose=True` 以便查看提示信息。

```python
from langchain_openai import OpenAI
from langchain.chains import ConversationChain
conversation_with_summary = ConversationChain(
    llm=OpenAI(temperature=0),
    # 我们设置了一个较低的 k=2，只保留最近的 2 个交互在内存中
    memory=ConversationBufferWindowMemory(k=2),
    verbose=True
)
conversation_with_summary.predict(input="Hi, what's up?")
```

---



```


    > 进入新的 ConversationChain 链...
    在格式化后的提示信息：
    下面是一个友好的人机对话。AI 与具体上下文提供了大量详细信息。如果 AI 不知道问题的答案，它会真实地表示不知道。

    当前对话：

    Human: Hi, what's up?
    AI:

    > 完成链。





    " 嗨！我很棒。我目前正在帮助一个顾客解决技术问题。你呢？"
```

---



```python
conversation_with_summary.predict(input="What's their issues?")
```

---



```


    > 进入新的 ConversationChain 链...
    在格式化后的提示信息：
    下面是一个友好的人机对话。AI 与具体上下文提供了大量详细信息。如果 AI 不知道问题的答案，它会真实地表示不知道。

    当前对话：
    Human: Hi, what's up?
    AI:  嗨！我很棒。我目前正在帮助一个顾客解决技术问题。你呢？
    Human: What's their issues?
    AI:

    > 完成链。





    " 该顾客无法连接到他们的 Wi-Fi 网络。我正在帮助他们解决问题并使其成功连接。"
```

---



```python
conversation_with_summary.predict(input="Is it going well?")
```

---



```


    > 进入新的 ConversationChain 链...
    在格式化后的提示信息：
    下面是一个友好的人机对话。AI 与具体上下文提供了大量详细信息。如果 AI 不知道问题的答案，它会真实地表示不知道。

    当前对话：
    Human: Hi, what's up?
    AI:  嗨！我很棒。我目前正在帮助一个顾客解决技术问题。你呢？
    Human: What's their issues?
    AI:  该顾客无法连接到他们的 Wi-Fi 网络。我正在帮助他们解决问题并使其成功连接。
    Human: Is it going well?
    AI:

    > 完成链。





    " 是的，目前进展顺利。我们已经找到了问题，并正在努力寻找解决方案。"
```

---



```python
# 注意这里第一个交互不出现了。
conversation_with_summary.predict(input="What's the solution?")
```

---



```


    > 进入新的 ConversationChain 链...
    在格式化后的提示信息：
    下面是一个友好的人机对话。AI 与具体上下文提供了大量详细信息。如果 AI 不知道问题的答案，它会真实地表示不知道。

    当前对话：
    Human: What's their issues?
    AI:  该顾客无法连接到他们的 Wi-Fi 网络。我正在帮助他们解决问题并使其成功连接。
    Human: Is it going well?
    AI:  是的，目前进展顺利。我们已经找到了问题，并正在努力寻找解决方案。
    Human: What's the solution?
    AI:

    > 完成链。





    " 解决方案是重置路由器并重新配置设置。我们目前正在进行这个过程。"
```

---

